package cn.edu.zut.pms.faker;

import com.github.javafaker.Faker;
import java.sql.*;
import java.util.Locale;
import java.util.Random;

public class FakerOrderDelivery {
    public static void main(String[] args) {
        // 数据库连接信息（请根据实际环境修改）
        String url = "jdbc:mysql://192.168.17.150:3306/soil?allowPublicKeyRetrieval=true&useSSL=false";
        String user = "root";
        String password = "000000";

        // 创建中文Faker实例
        Faker faker = new Faker(new Locale("zh_CN"));
        Random random = new Random();

        // 定义交货状态（与源表dwd_logistics_data保持一致）
        String[] deliveryStatus = {"已送达", "配送中", "已取消", "待发货", "配送延迟"};
        // 生成关联的订单号（与dwd_order_base或dwd_logistics_data格式一致）
        // 这里模拟已存在的有效订单号范围（假设ORD10000000-ORD99999999中已有部分订单）

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            // 插入数据的SQL语句
            String insertSql = "INSERT INTO dwd_order_delivery (" +
                    "order_id, delivery_status" +
                    ") VALUES (?, ?)";

            try (PreparedStatement preparedStatement = connection.prepareStatement(insertSql)) {
                // 生成300条有效关联的交货状态记录（可调整数量）
                for (int i = 0; i < 300; i++) {
                    // 生成与源表关联的有效订单号（确保格式一致）
                    String orderId = "ORD" + faker.number().numberBetween(10000000, 99999999);

                    // 随机选择交货状态，模拟实际业务分布
                    String status;
                    double rand = random.nextDouble();
                    if (rand < 0.6) {
                        status = "已送达"; // 已送达占比最高（60%）
                    } else if (rand < 0.75) {
                        status = "配送中"; // 配送中次之（15%）
                    } else if (rand < 0.85) {
                        status = "待发货"; // 待发货（10%）
                    } else if (rand < 0.95) {
                        status = "配送延迟"; // 配送延迟（10%）
                    } else {
                        status = "已取消"; // 已取消占比最低（5%）
                    }

                    // 设置参数
                    preparedStatement.setString(1, orderId);
                    preparedStatement.setString(2, status);

                    preparedStatement.executeUpdate();
                }
                System.out.println("数据插入完成，共插入 300 条订单交货状况记录");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}